home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Software 2000
/
Software 2000 Volume 1 (Disc 1 of 2).iso
/
utilities
/
u149.dms
/
u149.adf
/
Input
/
Mouse.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-05-25
|
3KB
|
117 lines
/* Mouse() */
/* Mouse() is a handy, easy and fast but naughty function that hits the */
/* hardware of the Amiga. It looks at either port 1 or port 2, and */
/* returns the (x and y) delta movement of the mouse, as well as a */
/* bitfield containing the present state of the three buttons. (A normal */
/* Amiga mouse has only two buttons (left and right), but it is possible */
/* to connect a mouse with three buttons, so why shouldn't we support */
/* it?) */
/* */
/* Synopsis: buttons = Mouse( port, dx, dy ); */
/* buttons: (UBYTE) If the left mouse button was pressed, bit one is */
/* set. If the middle mouse button was pressed the second */
/* bit is set, and if the right mouse button was pressed the */
/* third bit is set. */
/* port: (UBYTE) Set the flag PORT1 if you want to check the first */
/* (mouse) port, or set the flag PORT2 if you want to check */
/* the second (joystick) port. */
/* dx: (BYTE *) Pointer to a variable that will be initialized */
/* with the horizontal delta movement of the mouse. */
/* dy: (BYTE *) Pointer to a variable that will be initialized */
/* with the vertical delta movement of the mouse. */
#include <exec/types.h>
#include <hardware/custom.h>
#include <hardware/cia.h>
#define CIAAPRA 0xBFE001
#define LEFT_BUTTON 1
#define MIDDLE_BUTTON 2
#define RIGHT_BUTTON 4
#define PORT1 1
#define PORT2 2
extern struct Custom far custom;
struct CIA *cia = (struct CIA *) CIAAPRA;
void main();
UBYTE Mouse();
void main()
{
int timer = 0;
UBYTE value = 0, old_value = 0;
BYTE dx=0, dy=0;
while( timer < 30 )
{
old_value = value;
value = Mouse( PORT1, &dx, &dy );
printf( "(%4d :%4d) ", dx, dy );
if( value != old_value )
{
timer++;
if( value & LEFT_BUTTON )
printf("LEFT ");
if( value & MIDDLE_BUTTON )
printf("MIDDLE ");
if( value & RIGHT_BUTTON )
printf("RIGHT ");
}
printf("\n");
}
}
UBYTE Mouse( port, delta_x, delta_y )
UBYTE port;
BYTE *delta_x, *delta_y;
{
UBYTE data = 0;
UWORD joy, pot;
static BYTE x=0, y=0, old_x=0, old_y=0;
custom.potgo = 0xFF00;
pot = custom.potinp;
if( port == PORT1 )
{
/* PORT 1 ("MOUSE PORT") */
joy = custom.joy0dat;
data += !( cia->ciapra & 0x0040 ) ? LEFT_BUTTON : 0;
data += !( pot & 0x0100 ) ? MIDDLE_BUTTON : 0;
data += !( pot & 0x0400 ) ? RIGHT_BUTTON : 0;
}
else
{
/* PORT 2 ("JOYSTICK PORT") */
joy = custom.joy1dat;
data += !( cia->ciapra & 0x0080 ) ? LEFT_BUTTON : 0;
data += !( pot & 0x1000 ) ? MIDDLE_BUTTON : 0;
data += !( pot & 0x4000 ) ? RIGHT_BUTTON : 0;
}
old_x = x;
x = joy & 0x00FF;
*delta_x = x - old_x;
old_y = y;
y = joy >> 8;
*delta_y = y - old_y;
return( data );
}